home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-19 / rk_plot.zip / ZEIGER.ASM < prev    next >
Assembly Source File  |  1991-05-13  |  3KB  |  93 lines

  1. ;***********************************************************************
  2. ; ZEIGER.ASM
  3. ; Copyright     (C) 1991, Hans-Jürgen Herrler und Dieter Sosna
  4. ;***********************************************************************
  5.                 
  6. DATA    SEGMENT BYTE PUBLIC
  7.  
  8.         ; Pascal Variable
  9.         EXTRN   SizeOfFloat     : word
  10.  
  11. DATA    ENDS
  12.  
  13. CODE    SEGMENT BYTE PUBLIC
  14.         ASSUME CS:CODE, DS:DATA
  15.  
  16.         PUBLIC  Element
  17.         PUBLIC  IncPtr
  18.  
  19. ;       -------------------------------------------------------------------
  20. ;       FUNCTION Element(P: Pointer; i, j, SpaltenLen: Word): FloatPointer;
  21. ;       -------------------------------------------------------------------
  22.  
  23.         ; Parameter auf dem Stack:
  24.  
  25. SpaltenLen      EQU     6
  26. j               EQU     SpaltenLen + 2
  27. i               EQU     j + 2
  28. POfs            EQU     i + 2
  29. PSeg            EQU     POfs + 2
  30.  
  31. Element PROC FAR
  32.  
  33.         push    bp
  34.         mov     bp,sp
  35.         ; berechne Inkrement:
  36.         mov     ah,[bp + SpaltenLen]
  37.         mov     al,[bp + i]
  38.         dec     al
  39.         mul     ah                      ; ax := Pred(i)*SpaltenLen
  40.         mov     bx,[bp + j]
  41.         dec     bx
  42.         add     ax,bx                   ; ax := Pred(i)*SpaltenLen + Pred(j)
  43.         mul     word ptr SizeOfFloat    ; Ergebnis in dx,ax
  44.         ; inkrementiere Pointer
  45.         mov     bx,[bp + POfs]
  46.         xor     cx,cx
  47.         add     ax,bx
  48.         adc     dx,cx                   ; Übertrag berücksichtigen
  49.         mov     bx,ax
  50.         ; normalisiere nebenbei den Pointer
  51.         and     ax,000Fh                ; ax := neuer Offset
  52.         rcr     dx,1
  53.         rcr     bx,1
  54.         rcr     dx,1
  55.         rcr     bx,1
  56.         rcr     dx,1
  57.         rcr     bx,1
  58.         rcr     dx,1
  59.         rcr     bx,1
  60.         mov     dx,[bp + PSeg]
  61.         add     dx,bx                   ; neues Segment
  62.  
  63.         pop     bp
  64.         retf    0Ah
  65. Element ENDP
  66.  
  67. ;       -------------------------------------------------------------------
  68. ;       PROCEDURE IncPtr(Var P: FloatPointer);
  69. ;       -------------------------------------------------------------------
  70.  
  71.         ; Parameter auf dem Stack:
  72.  
  73. AdrOfsP         EQU     6
  74. AdrSegP         EQU     8
  75.  
  76. IncPtr  PROC FAR
  77.  
  78.         push    bp
  79.         mov     bp,sp
  80.  
  81.         les     di,[bp + AdrOfsP]
  82.         mov     ax,word ptr SizeOfFloat
  83.         add     es:[di],ax
  84.  
  85.         pop     bp
  86.         ret     4
  87.  
  88. IncPtr  ENDP
  89.  
  90.  
  91.         ENDS
  92.         END
  93.